home *** CD-ROM | disk | FTP | other *** search
/ Shareware Extravaganza - Disc 1 / ShareWare Extravaganza 1 of 4 (The Ultimate Shareware Company).iso / grprogs / picutil.exe / ALTER.SRC / BREAK.ASM < prev    next >
Assembly Source File  |  1985-12-30  |  3KB  |  98 lines

  1.  
  2. ;╔═════════════════════════════════════════════════════════════════════════════╗
  3. ;║ ░░░░░░░░░░ PROGRAM = BREAK.ASM ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  4. ;╚═════════════════════════════════════════════════════════════════════════════╝
  5.  
  6. CSEG          SEGMENT  PUBLIC BYTE
  7.           ASSUME   CS:CSEG,DS:CSEG
  8.  
  9. EOI          EQU      20H              ;END OF INTERRUPT
  10. BRKINT          EQU      1BH              ;BREAK INTERRUPT
  11. SAV_BRK       DW       ?
  12.           DW       ?
  13.  
  14. EXTRN          STACK:BYTE
  15.  
  16. ;╔═════════════════════════════════════════════════════════════════════════════╗
  17. ;║ ░░░░░░░░░░ BREAK_ON ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  18. ;╚═════════════════════════════════════════════════════════════════════════════╝
  19.           PUBLIC   BREAK_ON
  20. BREAK_ON      PROC     NEAR
  21.           PUSH     AX
  22.           PUSH     BX               ;SAVE REGISTERS
  23.           PUSH     CX               ;
  24.           PUSH     DX               ;
  25.           PUSH     SI               ;
  26.           PUSH     ES               ;
  27.  
  28.           XOR      BX,BX               ;SEGMENT 0
  29.           MOV      ES,BX               ;
  30.           MOV      SI,BRKINT*4           ;OFFSET OF INTERUPT VECTOR
  31.  
  32.           MOV      CX,ES:WORD PTR[SI]      ;OFFSET OF CURRENT VECT
  33.           MOV      DX,ES:WORD PTR[SI+2]    ;SEGMENT OF CURRENT VECT
  34.           MOV      CS:SAV_BRK,CX           ;SAVE OFFSET
  35.           MOV      CS:SAV_BRK+2,DX           ;SAVE SEGMENT
  36.  
  37.           MOV      AX,OFFSET BREAK           ;
  38.           CLI                   ;NO INTERRUPTS
  39.           MOV      ES:WORD PTR[SI],AX      ;SET OFFSET
  40.           MOV      AX,CS               ;SET THIS CODE SEGMENT
  41.           MOV      ES:WORD PTR[SI+2],AX    ;MOVE SEG ADDR TO INT.VECT
  42.           STI                   ;INTERRUPTS BACK ON
  43.  
  44.           POP      ES               ;RESTORE REGISTERS
  45.           POP      SI               ;
  46.           POP      DX               ;
  47.           POP      CX               ;
  48.           POP      BX               ;
  49.           POP      AX               ;
  50.           RET                   ;
  51. BREAK_ON      ENDP
  52. ;╔═════════════════════════════════════════════════════════════════════════════╗
  53. ;║ ░░░░░░░░░░ BREAK_OFF ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  54. ;╚═════════════════════════════════════════════════════════════════════════════╝
  55.           PUBLIC   BREAK_OFF
  56. BREAK_OFF     PROC     NEAR
  57.  
  58.           PUSH     AX               ;
  59.           PUSH     CX               ;
  60.           PUSH     DX               ;
  61.           PUSH     DI               ;
  62.           PUSH     ES               ;
  63.  
  64.           XOR      AX,AX               ;
  65.           MOV      ES,AX               ;SEGMENT 0
  66.           MOV      CX,CS:SAV_BRK           ;RESET VECTOR BACK TO OLD RTN
  67.           MOV      DX,CS:SAV_BRK+2           ;
  68.           MOV      DI,BRKINT*4           ;
  69.           CLI                   ;NO INTERRUPTS
  70.           MOV      ES:WORD PTR[DI],CX      ;
  71.           MOV      ES:WORD PTR[DI+2],DX    ;
  72.           STI                   ;INTERRUPTS BACK ON
  73.  
  74.           POP      ES               ;
  75.           POP      DI               ;
  76.           POP      DX               ;
  77.           POP      CX               ;
  78.           POP      AX               ;
  79.           RET                   ;
  80. BREAK_OFF     ENDP
  81. ;╔═════════════════════════════════════════════════════════════════════════════╗
  82. ;║ ░░░░░░░░░░ BREAK ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║ J
  83. ;╚═════════════════════════════════════════════════════════════════════════════╝
  84.           PUBLIC   BREAK
  85. BREAK          PROC     FAR
  86.  
  87.           MOV      AX,CS
  88.           MOV      DS,AX
  89.           MOV      AL,EOI               ;
  90.           OUT      020H,AL               ;
  91.           CALL     BREAK_OFF
  92.           MOV      SP,OFFSET STACK-4       ;
  93.            RET
  94.  
  95. BREAK          ENDP
  96. CSEG          ENDS
  97.           END
  98.